Skip to main content

Voter's Card (PVC) Verification

Voter's Card (PVC) Verificationโ€‹

Confirms a Nigerian Permanent Voter's Card number and returns the holder's record.

POST /api/v1/id-verifications/identity/ng/pvc

Authenticate with your API key (x-api-key) or a bearer token.

Requires the KYC_NG_VERIFY and KYC_RESULT_VIEW permissions. Sending validations.data also requires KYC_DATA_VALIDATE; sending validations.selfie.image also requires KYC_IMAGE_COMPARE.

Request bodyโ€‹

NameTypeDescription
id*StringThe PVC number.
isSubjectConsent*BooleanConfirms the subject consented to the check. Must be true. Rejected before the provider is called, so a false costs you nothing.
validationsObjectOptional. Details to compare against the record we find.
validations.data.firstNameStringFirst name to compare.
validations.data.lastNameStringLast name to compare.
validations.data.dateOfBirthStringDate of birth to compare, YYYY-MM-DD.
metadataObjectAnything you like. Returned to you untouched.

Fields marked * are required.

Exampleโ€‹

Request
{
"id": "00A0A0A000000000000",
"isSubjectConsent": true
}
Response
{
"status": 200,
"data": {
"id": "e0f85fba-7b95-4424-8815-975e49014483",
"fullName": "John Doe",
"documentType": "NG_PVC",
"documentCountry": "NG",
"documentId": "00A0A0A000000000000",
"requestAt": "2026-09-04T09:25:16.866Z",
"requestUpdatedAt": "2026-09-04T09:29:20.325Z",
"requestedBy": {
"id": "dcd1e472-2be7-41b3-b812-cdec840225a0",
"firstName": "sylvernus",
"lastName": "akubo"
},
"type": "pvc",
"email": "",
"image": "",
"gender": "",
"mobile": "",
"reason": null,
"status": "found",
"country": "NG",
"idNumber": "00A0A0A000000000000",
"lastName": "Doe",
"metadata": {},
"checkType": "ng.pvc",
"firstName": "John",
"isConsent": true,
"middleName": "",
"dateOfBirth": "1990-04-04",
"validations": null,
"dataValidation": false,
"identityNumber": "00A0A0A000000000000",
"imageValidation": false,
"selfieValidation": false,
"allValidationPassed": true
},
"message": "Successfull!",
"code": "info"
}

When there is no matchโ€‹

A check that reaches the provider but finds nothing still returns 200. Read data.status โ€” it is found or not_found โ€” rather than relying on the HTTP code.

Response
{
"status": 200,
"data": {
"id": "4b798afe-8344-4ae0-bdb9-860b3404d7d7",
"fullName": "",
"documentType": "NG_PVC",
"documentCountry": "NG",
"documentId": "11A1A1A111111111111",
"requestAt": "2026-09-04T09:25:17.344Z",
"requestUpdatedAt": "2026-09-04T09:29:21.190Z",
"requestedBy": {
"id": "dcd1e472-2be7-41b3-b812-cdec840225a0",
"firstName": "sylvernus",
"lastName": "akubo"
},
"type": "pvc",
"email": "",
"image": "",
"gender": "",
"mobile": "",
"reason": "ID data not found",
"status": "not_found",
"country": "NG",
"idNumber": "11A1A1A111111111111",
"lastName": "",
"metadata": {},
"checkType": "ng.pvc",
"firstName": "",
"isConsent": true,
"middleName": "",
"dateOfBirth": "",
"validations": null,
"dataValidation": false,
"identityNumber": "11A1A1A111111111111",
"imageValidation": false,
"selfieValidation": false,
"allValidationPassed": false
},
"message": "Successfull!",
"code": "info"
}